// ============数据库配置文件开始===========
// 导入 Node.js 内置模块和第三方库 - Import Node.js built-in modules and third-party libraries
import { join, dirname } from "path";        // 路径处理工具 - Path handling utilities
import { fileURLToPath } from "url";         // URL 转文件路径工具 - URL to file path converter
import { Low } from "lowdb";                 // 轻量级 JSON 数据库 - Lightweight JSON database
import { JSONFile } from "lowdb/node";       // JSON 文件适配器 - JSON file adapter

// 第一步：获取当前文件的目录路径 - Step 1: Get current file directory path
// 在 ES6 模块中，__dirname 不可用，需要通过 import.meta.url 获取 - In ES6 modules, __dirname is not available, need to get it via import.meta.url
const __dirname = dirname(fileURLToPath(import.meta.url));

// 第二步：构建数据库文件路径 - Step 2: Build database file path
// 数据库文件存储在项目根目录的 data 文件夹中 - Database file is stored in the data folder of project root
const file = join(__dirname, "../../data/db.json");

// 第三步：创建 JSON 文件适配器 - Step 3: Create JSON file adapter
// JSONFile 适配器负责读写 JSON 文件 - JSONFile adapter handles reading and writing JSON files
const adapter = new JSONFile(file);

// 第四步：定义默认数据结构 - Step 4: Define default data structure
// 当数据库文件不存在时，使用这个默认结构初始化 - Use this default structure to initialize when database file doesn't exist
const defaultData = {
  users: [],              // 用户数据数组 - User data array
  verificationCodes: [],  // 验证码数据数组 - Verification code data array
};

// 第五步：创建数据库实例 - Step 5: Create database instance
// Low 是一个简单的 JSON 数据库，适合小型项目 - Low is a simple JSON database suitable for small projects
export const db = new Low(adapter, defaultData);

// 第六步：数据库初始化函数 - Step 6: Database initialization function
// 这个函数在应用启动时被调用，确保数据库文件存在并可用 - This function is called when app starts to ensure database file exists and is usable
export const initDatabase = async () => {
  try {
    // 读取数据库文件 - Read database file
    // 如果文件不存在，lowdb 会自动创建 - If file doesn't exist, lowdb will create it automatically
    await db.read();

    // 检查数据是否存在 - Check if data exists
    // 如果数据文件不存在或为空，设置默认数据 - If data file doesn't exist or is empty, set default data
    if (!db.data) {
      // 设置默认数据结构 - Set default data structure
      db.data = defaultData;
      
      // 将默认数据写入文件 - Write default data to file
      await db.write();
      
      console.log("✅ 数据库初始化成功 - Database initialized successfully");
      console.log(`📁 数据库文件位置: ${file}`);
    } else {
      console.log("✅ 数据库连接成功 - Database connected successfully");
      console.log(`📊 当前用户数量: ${db.data.users?.length || 0}`);
      console.log(`🔐 当前验证码数量: ${db.data.verificationCodes?.length || 0}`);
    }

    // 返回数据库实例供其他模块使用 - Return database instance for use by other modules
    return db;
    
  } catch (error) {
    // 数据库初始化失败处理 - Handle database initialization failure
    console.error("❌ 数据库初始化失败 - Database initialization failed:", error);
    throw error; // 重新抛出错误，让应用知道初始化失败 - Re-throw error to let app know initialization failed
  }
};
// ============数据库配置文件结束===========
